/**
 * Ingenius-Group S.A.S
 *
 * Project: SAU
 * File: CoreServiceAsync.java
 * Date: 28/02/2011
 */

package com.ingenius.sau.client.service;

import java.util.List;

import com.extjs.gxt.ui.client.data.BasePagingLoadConfig;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.ingenius.sau.shared.model.core.Factor2Evaluate;
import com.ingenius.sau.shared.model.core.Feature2Evaluate;
import com.ingenius.sau.shared.model.core.Indicator2Evaluate;
import com.ingenius.sau.shared.model.core.Scale;
import com.ingenius.sau.shared.model.core.SelfEvaluation;
import com.ingenius.sau.shared.model.guidelines.Guideline;
import com.ingenius.sau.shared.model.instruments.AssignedInstrument;
import com.ingenius.sau.shared.model.instruments.Document;
import com.ingenius.sau.shared.model.instruments.Question;
import com.ingenius.sau.shared.model.programs.AcademicProgram;
import com.ingenius.sau.shared.model.users.Group;
import com.ingenius.sau.shared.util.filter.Filter;

/**
 * Class <strong>CoreServiceAsync</strong>
 * 
 * @author Jesus David
 * @version 0.1
 */
public interface CoreServiceAsync {

	void deleteAcademicProgram(String id, AsyncCallback<Boolean> callback);

	void deleteAssignedInstrument(String id, AsyncCallback<Boolean> callback);

	void deleteFactor2Evaluate(String id, AsyncCallback<Boolean> callback);

	void deleteFeature2Evaluate(String id, AsyncCallback<Boolean> callback);

	void deleteIndicator2Evaluate(String id, AsyncCallback<Boolean> callback);

	void deleteSelfEvaluation(String id, AsyncCallback<Boolean> callback);

	void findAcademicPrograms(List<Filter> filters,
			BasePagingLoadConfig config,
			AsyncCallback<PagingLoadResult<AcademicProgram>> callback);

	void findAssignedInstruments(List<Filter> filters,
			BasePagingLoadConfig config,
			AsyncCallback<PagingLoadResult<AssignedInstrument>> callback);

	void findFactors2Evaluate(List<Filter> filters,
			BasePagingLoadConfig config,
			AsyncCallback<PagingLoadResult<Factor2Evaluate>> callback);

	void findFeatures2Evaluate(List<Filter> filters,
			BasePagingLoadConfig config,
			AsyncCallback<PagingLoadResult<Feature2Evaluate>> callback);

	void findIndicators2Evaluate(List<Filter> filters,
			BasePagingLoadConfig config,
			AsyncCallback<PagingLoadResult<Indicator2Evaluate>> callback);

	void findSelfEvaluations(List<Filter> filters, BasePagingLoadConfig config,
			AsyncCallback<PagingLoadResult<SelfEvaluation>> callback);

	void getAcademicProgram(String id, AsyncCallback<AcademicProgram> callback);

	void getAssignedInstrument(String id,
			AsyncCallback<AssignedInstrument> callback);

	void getFactor2Evaluate(String id, AsyncCallback<Factor2Evaluate> callback);

	void getFeature2Evaluate(String id, AsyncCallback<Feature2Evaluate> callback);

	void getIndicator2Evaluate(String id,
			AsyncCallback<Indicator2Evaluate> callback);

	void getSelfEvaluation(String id, AsyncCallback<SelfEvaluation> callback);

	void loadAllDocs(AsyncCallback<List<Document>> callback);

	void loadAllGroups(AsyncCallback<List<Group>> callback);

	void loadAllGuidelines(AsyncCallback<List<Guideline>> callback);

	void loadAllPrograms(AsyncCallback<List<AcademicProgram>> callback);

	void loadAllQuestions(AsyncCallback<List<Question>> callback);

	void loadAllScales(AsyncCallback<List<Scale>> callback);

	void saveOrUpdateAcademicProgram(AcademicProgram program,
			AsyncCallback<Boolean> callback);

	void saveOrUpdateAssignedInstrument(AssignedInstrument assignedInstrument,
			AsyncCallback<Boolean> callback);

	void saveOrUpdateFactor2Evaluate(Factor2Evaluate factor2Evaluate,
			AsyncCallback<Boolean> callback);

	void saveOrUpdateFeature2Evaluate(Feature2Evaluate feature2Evaluate,
			AsyncCallback<Boolean> callback);

	void saveOrUpdateIndicator2Evaluate(Indicator2Evaluate indicator2Evaluate,
			AsyncCallback<Boolean> callback);

	void saveOrUpdateSelfEvaluation(SelfEvaluation evaluation,
			AsyncCallback<Boolean> callback);

	void getSelfEvaluationScale(String processId, AsyncCallback<Scale> callback);

}
